//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.
public class InstrumentFactory {

    public static Instrument createInstrument(String type) {
        switch (type) {
            case "guitar": return new Guitar();
            case "piano": return new Piano();
            case "violin": return new Violin();
            default: throw new IllegalArgumentException("Unknown instrument type: " + type);
        }
    }
}

abstract class Instrument {
    abstract void playNote(int pitch, int duration);
}

class Guitar extends Instrument {
    @Override
    void playNote(int pitch, int duration) {
        // Здесь может быть реализация воспроизведения ноты на гитаре
        System.out.println("Guitar plays note " + pitch + " for " + duration + " beats");
    }
}

class Piano extends Instrument {
    @Override
    void playNote(int pitch, int duration) {
        // Здесь может быть реализация воспроизведения ноты на фортепиано
        System.out.println("Piano plays note " + pitch + " for " + duration + " beats");
    }
}

class Violin extends Instrument {
    @Override
    void playNote(int pitch, int duration) {
        // Здесь может быть реализация воспроизведения ноты на скрипке
        System.out.println("Violin plays note " + pitch + " for " + duration + " beats");
    }
}
public class MusicComposition {
    public static void main(String[] args) {
        Instrument guitar = InstrumentFactory.createInstrument("guitar");
        Instrument piano = InstrumentFactory.createInstrument("piano");
        Instrument violin = InstrumentFactory.createInstrument("violin");

        guitar.playNote(60, 4); // Гитара играет ноту C4 в течение 4 ударов
        piano.playNote(64, 8);  // Фортепиано играет ноту F4 в течение 8 ударов
        violin.playNote(67, 16); // Скрипка играет ноту G4 в течение 16 ударов
    }
}

